<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实习日志</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>实习日志</h1>

        <div class="header-info">
            <p><strong>小组成员:</strong> <span id="teamMembers">朱鑫鑫，何天成，赵博为，吕宇宸，康名凯</span></p>
        </div>

        <div class="log-section">
            <h2>第 1 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月5日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学犀浦校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">15：00~15：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">实习安全宣讲大会，快速分组</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">了解了实习内容及安全事项</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 2 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月6日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~21：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">实地考察，建立gitee项目</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">了解了峨眉校区各类人群的出行需求；学习了团队协作实现项目的基本操作</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/wCVYRdN.png" alt="Gitee仓库">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 3 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月7日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">电控组代码：oled：#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

/* 屏幕尺寸定义 */
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

/* 自定义I2C引脚 */
#define SDA_PIN 4
#define SCL_PIN 15

/* 电池监测引脚 */
#define BATTERY_PIN 34

/* 电池参数 */
const float MAX_VOLTAGE = 4.2;
const float MIN_VOLTAGE = 3.3;
const float VOLTAGE_DIVIDER = 2.0;

/* 初始化 */
TwoWire myWire = TwoWire(0);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &myWire, OLED_RESET);

float voltage = 0.0;    // 存储计算后的电压值
float percent = 0;      // 电池百分比
float currentSpeed = 0.0; // 当前速度
unsigned long lastUpdate = 0; // 上次更新时间

void setup() {
  Serial.begin(115200);           // 初始化串口通信，波特率115200
  analogReadResolution(12);       // 设置ADC分辨率为12位（0-4095）
  analogSetAttenuation(ADC_11db);  // 设置ADC衰减为11dB（量程0-3.3V）
  myWire.begin(SDA_PIN, SCL_PIN, 400000); // 初始化I2C
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306初始化失败"));
    while(1);
  }
  
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.display();
}

void loop() {
  // 读取电池电压
  int adcValue = analogRead(BATTERY_PIN);    // 读取ADC原始值（0-4095）
  voltage = (adcValue * 3.3) / 4095.0 * VOLTAGE_DIVIDER;  // 转换为电压值
  percent = (voltage - MIN_VOLTAGE) * 100 / (MAX_VOLTAGE - MIN_VOLTAGE);  // 计算百分比
  percent = constrain(percent, 0, 100); // 限制在0-100范围内
  
  // 更新速度（模拟）
  updateSpeed();
  
  // 通过串口发送数据到电脑
  Serial.print("ADC Value: ");
  Serial.print(adcValue);
  Serial.print(" | Voltage: ");
  Serial.print(voltage, 3); 
  Serial.print("V");
  Serial.print(" | Percentage: ");
  Serial.print(percent, 1);
  Serial.println("%");
  Serial.print("Speed: ");
  Serial.print(currentSpeed, 1);
  Serial.println(" km/h");

  // OLED显示
  display.clearDisplay();  // 清空屏幕
  
  // 显示标题
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Battery Monitor");
  
  // 绘制分隔线
  display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
  
  // 显示电压值
  display.setCursor(0, 15);
  display.print("Voltage:");
  display.setCursor(60, 15);
  display.print(voltage, 2);
  display.print("V");
  
  // 显示百分比
  display.setCursor(0, 25);
  display.print("Percent:");
  display.setCursor(60, 25);
  display.print(percent, 1);
  display.print("%");
  
  // 绘制电池图标
  drawBatteryIcon(0, 35, percent);
  
  // 显示速度
  display.setCursor(0, 50);
  display.print("Speed:");
  display.setCursor(60, 50);
  display.print(currentSpeed, 1);
  display.print(" km/h");
  
  display.display();
  
  delay(500); // 刷新间隔
}

void updateSpeed() {
  if (millis() - lastUpdate > 1000) {
    currentSpeed += 5.3;
    if (currentSpeed > 100) currentSpeed = 0;
    lastUpdate = millis();
  }
}

void drawBatteryIcon(int x, int y, int percent) {
  // 电池外框
  display.drawRect(x, y, 30, 10, SSD1306_WHITE);
  // 电池正极
  display.fillRect(x + 30, y + 2, 2, 6, SSD1306_WHITE);
  // 电量填充
  int fillWidth = map(percent, 0, 100, 0, 28);
  display.fillRect(x + 1, y + 1, fillWidth, 8, SSD1306_WHITE);
}
摇杆：#include <Arduino.h>

// 定义引脚
const int xAxisPin = 34; // X轴信号线连接到gpio34
const int yAxisPin = 35; // Y轴信号线连接到gpio35
const int buttonPin = 32; // 摇杆按钮信号线连接到gpio32

// 定义阈值
const int leftThreshold = 1024;
const int rightThreshold = 3072;
const int upThreshold = 1024;
const int downThreshold = 3072;

void setup() {
  // 初始化串口通信
  Serial.begin(115200);

  // 设置引脚模式
  pinMode(xAxisPin, INPUT);
  pinMode(yAxisPin, INPUT);
  pinMode(buttonPin, INPUT_PULLUP); // 使用上拉电阻
}

void loop() {
  // 读取X轴和Y轴的模拟值
  int xAxisValue = analogRead(xAxisPin);
  int yAxisValue = analogRead(yAxisPin);

  // 读取按钮状态
  bool buttonState = digitalRead(buttonPin) == LOW;

  // 判断摇杆方向
  if (buttonState) {
    Serial.println("Brake");
  } else if (xAxisValue < leftThreshold) {
    Serial.println("Left");
  } else if (xAxisValue > rightThreshold) {
    Serial.println("Right");
  } else if (yAxisValue < upThreshold) {
    Serial.println("Up");
  } else if (yAxisValue > downThreshold) {
    Serial.println("Down");
  } else {
    Serial.println("Stop");
  }

  // 延迟一段时间以避免重复打印
  delay(200);
电池组：今天的电池组实习内容主要是电池组模块内部的连接，利用点焊机将电线与电池系统-单节电池充电板-TP4056相接，再通过电焊把正负极分别与电池盒正负极桥接。</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">今天电池组实习操作电池组模块连接，用点焊机将电线与TP4056充电板对接，再电焊正负极桥接电池。亲手操作让我们熟悉了点焊机使用，明白正负极连接的严谨性--稍有偏差可能影响电池性能。这让我体会到细节对电路安全的重要性，理论需结合实操才更扎实。</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/vgnCCvQ.jpeg" alt="摇杆">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/xQITic2.jpeg" alt="OLED">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 4 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月8日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">电控组代码：电位器：#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// 定义引脚
const int xAxisPin = 34; // X轴信号线连接到gpio34
const int yAxisPin = 35; // Y轴信号线连接到gpio35
const int buttonPin = 32; // 按钮信号线连接到gpio32

// 定义阈值
const int leftThreshold = 1024;
const int rightThreshold = 3072;
const int upThreshold = 1024;
const int downThreshold = 3072;

// 引脚定义
#define THROTTLE_SWITCH_PIN 13  // 连接脚踏开关的引脚（GPIO13）
#define LED_PIN 2               // 内置LED指示油门状态

// 油门状态
bool throttleEngaged = false;
bool lastThrottleState = false;
unsigned long throttlePressTime = 0;
const unsigned long THROTTLE_HOLD_TIME = 1000; // 油门持续激活时间(ms)

// 电位器连接引脚
const int POT_PIN = 36;    // 连接到GPIO36（VP引脚）

// LED指示灯引脚（用于可视化档位）
const int GEAR_LED_PIN = 16;   // 使用GPIO16作为档位指示灯

// 电流输出控制引脚（或电机控制引脚）
const int OUTPUT_PIN = 25; // GPIO25用于输出控制

// 系统参数
const int MAX_ADC = 4095;   // ESP32 ADC最大读数（12位）
const int NUM_GEARS = 5;     // 档位数 (0-4档)
const int PWM_RESOLUTION = 8; // PWM分辨率（8位 = 0-255）

// 档位定义结构
struct GearSetting {
  int gearNum;         // 档位编号
  const char* gearName; // 档位名称
  int pwmValue;        // PWM值（0-255）
  int minVal;          // 电位器最小值范围
  int maxVal;          // 电位器最大值范围
};

// 档位设置（根据电位器范围分为5档）
GearSetting gears[5] = {
  {0, "空档",   0,   0, 799},      // 0-799
  {1, "1档",  64, 800, 1599},    // 800-1599
  {2, "2档", 128, 1600, 2399},   // 1600-2399
  {3, "3档", 192, 2400, 3199},   // 2400-3199
  {4, "4档", 255, 3200, 4095}     // 3200-4095
};

/* 屏幕尺寸定义 */
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

/* 自定义I2C引脚 */
#define SDA_PIN 4
#define SCL_PIN 15

/* 电池监测引脚 */
#define BATTERY_PIN 34

/* 电池参数 */
const float MAX_VOLTAGE = 4.2;
const float MIN_VOLTAGE = 3.3;
const float VOLTAGE_DIVIDER = 2.0;

/* 初始化 */
TwoWire myWire = TwoWire(0);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &myWire, OLED_RESET);

float voltage = 0.0;    // 存储计算后的电压值
float percent = 0;      // 电池百分比
float currentSpeed = 0.0; // 当前速度
unsigned long lastUpdate = 0; // 上次更新时间

void setup() {
  Serial.begin(115200);

  // 设置摇杆和按钮引脚模式
  pinMode(xAxisPin, INPUT);
  pinMode(yAxisPin, INPUT);
  pinMode(buttonPin, INPUT_PULLUP); // 使用上拉电阻

  // 配置油门引脚模式
  pinMode(THROTTLE_SWITCH_PIN, INPUT_PULLUP);  // 启用内部上拉电阻
  pinMode(LED_PIN, OUTPUT);

  // 配置档位指示灯引脚模式
  pinMode(GEAR_LED_PIN, OUTPUT);

  // 配置输出引脚模式
  pinMode(OUTPUT_PIN, OUTPUT);
  ledcSetup(0, 5000, PWM_RESOLUTION); // 通道0, 5kHz频率, 8位分辨率
  ledcAttachPin(OUTPUT_PIN, 0);       // 将通道0附加到输出引脚

  // 初始化ADC分辨率
  analogReadResolution(12);       // 设置ADC分辨率为12位（0-4095）
  analogSetAttenuation(ADC_11db);  // 设置ADC衰减为11dB（量程0-3.3V）

  // 初始化I2C
  myWire.begin(SDA_PIN, SCL_PIN, 400000); // 初始化I2C

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306初始化失败"));
    while (1);
  }

  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.display();

  Serial.println("综合控制系统启动");
}

void loop() {
  // 读取摇杆位置信号
  int xAxisValue = analogRead(xAxisPin);
  int yAxisValue = analogRead(yAxisPin);

  // 读取按钮状态
  bool buttonState = digitalRead(buttonPin) == LOW;

  // 判断摇杆方向
  if (buttonState) {
    Serial.println("Brake");
  } else if (xAxisValue < leftThreshold) {
    Serial.println("Left");
  } else if (xAxisValue > rightThreshold) {
    Serial.println("Right");
  } else if (yAxisValue < upThreshold) {
    Serial.println("Up");
  } else if (yAxisValue > downThreshold) {
    Serial.println("Down");
  } else {
    Serial.println("Stop");
  }

  // 读取油门开关状态
  bool currentSwitchState = digitalRead(THROTTLE_SWITCH_PIN) == LOW;

  // 检测油门状态变化
  if (currentSwitchState != lastThrottleState) {
    // 消抖延迟
    delay(50);
    currentSwitchState = digitalRead(THROTTLE_SWITCH_PIN) == LOW;

    if (currentSwitchState != lastThrottleState) {
      // 油门被踩下
      if (currentSwitchState) {
        throttleEngaged = true;
        throttlePressTime = millis();
        Serial.println("油门激活");

        // 驱动LED显示
        digitalWrite(LED_PIN, HIGH);

        // 启动油门控制功能
        activateThrottle();
      }
      // 油门被释放
      else {
        throttleEngaged = false;
        Serial.println("油门解除");

        // 关闭LED
        digitalWrite(LED_PIN, LOW);

        // 执行刹车功能
        deactivateThrottle();
      }

      lastThrottleState = currentSwitchState;
    }
  }

  // 当油门保持被踩下状态时的连续控制
  if (throttleEngaged) {
    // 持续油门控制 - 例如按比例控制速度
    maintainThrottle();

    // 额外的安全逻辑 - 如果踩下超过3秒警告
    if (millis() - throttlePressTime > 3000) {
      Serial.println("警告：油门激活时间过长！");
    }
  }

  // 读取电位器值
  int potValue = analogRead(POT_PIN);

  // 确定当前档位
  int currentGear = -1;
  for (int i = 0; i < NUM_GEARS; i++) {
    if (potValue >= gears[i].minVal && potValue <= gears[i].maxVal) {
      currentGear = i;
      break;
    }
  }

  // 设置输出电流（PWM）
  if (currentGear >= 0) {
    ledcWrite(0, gears[currentGear].pwmValue);
  }

  // 控制指示灯（不同档位闪烁模式）
  controlIndicator(currentGear);

  // 读取电池电压
  int adcValue = analogRead(BATTERY_PIN);    // 读取ADC原始值（0-4095）
  voltage = (adcValue * 3.3) / 4095.0 * VOLTAGE_DIVIDER;  // 转换为电压值
  percent = (voltage - MIN_VOLTAGE) * 100 / (MAX_VOLTAGE - MIN_VOLTAGE);  // 计算百分比
  percent = constrain(percent, 0, 100); // 限制在0-100范围内

  // 更新速度（模拟）
  updateSpeed();

  // 通过串口发送数据到电脑
  Serial.print("ADC Value: ");
  Serial.print(adcValue);
  Serial.print(" | Voltage: ");
  Serial.print(voltage, 3);
  Serial.print("V");
  Serial.print(" | Percentage: ");
  Serial.print(percent, 1);
  Serial.println("%");
  Serial.print("Speed: ");
  Serial.print(currentSpeed, 1);
  Serial.println(" km/h");

  // OLED显示
  display.clearDisplay();  // 清空屏幕

  // 显示标题
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Battery Monitor");

  // 绘制分隔线
  display.drawLine(0, 10, 128, 10, SSD1306_WHITE);

  // 显示电压值
  display.setCursor(0, 15);
  display.print("Voltage:");
  display.setCursor(60, 15);
  display.print(voltage, 2);
  display.print("V");

  // 显示百分比
  display.setCursor(0, 25);
  display.print("Percent:");
  display.setCursor(60, 25);
  display.print(percent, 1);
  display.print("%");

  // 绘制电池图标
  drawBatteryIcon(0, 35, percent);

  // 显示速度
  display.setCursor(0, 50);
  display.print("Speed:");
  display.setCursor(60, 50);
  display.print(currentSpeed, 1);
  display.print(" km/h");

  display.display();

  delay(200); // 延迟一段时间以避免重复打印
}

// 油门激活处理函数
void activateThrottle() {
  // 这里实现油门激活功能
  // 例如：启动电机、增加速度等
  Serial.println("系统：油门激活控制执行");
}

// 油门持续控制函数
void maintainThrottle() {
  // 这里实现油门持续被踩下时的控制逻辑
  // 例如：根据压力传感器调整速度 (如果有模拟输入)
  // 当前仅作为占位函数
}

// 油门解除处理函数
void deactivateThrottle() {
  // 这里实现油门解除功能
  // 例如：刹车、减速等
  Serial.println("系统：执行刹车功能");
}

// 控制指示灯函数（不同档位不同闪烁模式）
void controlIndicator(int gear) {
  static unsigned long lastBlink = 0;
  static int blinkState = LOW;

  unsigned long blinkInterval = 1000; // 默认1秒闪烁

  switch (gear) {
    case 0: // 空档 - 常灭
      digitalWrite(GEAR_LED_PIN, LOW);
      return;
    case 1: // 1档 - 慢闪（1秒间隔）
      blinkInterval = 1000;
      break;
    case 2: // 2档 - 中速闪（0.5秒间隔）
      blinkInterval = 500;
      break;
    case 3: // 3档 - 快闪（0.25秒间隔）
      blinkInterval = 250;
      break;
    case 4: // 4档 - 常亮
      digitalWrite(GEAR_LED_PIN, HIGH);
      return;
    default: // 异常状态
      blinkInterval = 100;
      break;
  }

  // 处理闪烁
  if (millis() - lastBlink > blinkInterval) {
    blinkState = !blinkState;
    digitalWrite(GEAR_LED_PIN, blinkState);
    lastBlink = millis();
  }
}

void updateSpeed() {
  if (millis() - lastUpdate > 1000) {
    currentSpeed += 5.3;
    if (currentSpeed > 100) currentSpeed = 0;
    lastUpdate = millis();
  }
}

void drawBatteryIcon(int x, int y, int percent) {
  // 电池外框
  display.drawRect(x, y, 30, 10, SSD1306_WHITE);
  // 电池正极
  display.fillRect(x + 30, y + 2, 2, 6, SSD1306_WHITE);
  // 电量填充
  int fillWidth = map(percent, 0, 100, 0, 28);
  display.fillRect(x + 1, y + 1, fillWidth, 8, SSD1306_WHITE);
}
油门：#include <Arduino.h>

// 引脚定义
#define THROTTLE_SWITCH_PIN 13  // 连接脚踏开关的引脚（GPIO13）
#define LED_PIN 2               // 内置LED指示油门状态

// 油门状态
bool throttleEngaged = false;
bool lastThrottleState = false;
unsigned long throttlePressTime = 0;
const unsigned long THROTTLE_HOLD_TIME = 1000; // 油门持续激活时间(ms)

void setup() {
  Serial.begin(115200);
  
  // 配置引脚模式
  pinMode(THROTTLE_SWITCH_PIN, INPUT_PULLUP);  // 启用内部上拉电阻
  pinMode(LED_PIN, OUTPUT);
  
  Serial.println("油门控制系统启动");
  Serial.println("等待油门激活...");
}

void loop() {
  // 读取油门开关状态
  bool currentSwitchState = digitalRead(THROTTLE_SWITCH_PIN) == LOW;
  
  // 检测油门状态变化
  if (currentSwitchState != lastThrottleState) {
    // 消抖延迟
    delay(50); 
    currentSwitchState = digitalRead(THROTTLE_SWITCH_PIN) == LOW;
    
    if (currentSwitchState != lastThrottleState) {
      // 油门被踩下
      if (currentSwitchState) {
        throttleEngaged = true;
        throttlePressTime = millis();
        Serial.println("油门激活");
        
        // 驱动LED显示
        digitalWrite(LED_PIN, HIGH);
        
        // 启动油门控制功能
        activateThrottle();
      } 
      // 油门被释放
      else {
        throttleEngaged = false;
        Serial.println("油门解除");
        
        // 关闭LED
        digitalWrite(LED_PIN, LOW);
        
        // 执行刹车功能
        deactivateThrottle();
      }
      
      lastThrottleState = currentSwitchState;
    }
  }
  
  // 当油门保持被踩下状态时的连续控制
  if (throttleEngaged) {
    // 持续油门控制 - 例如按比例控制速度
    maintainThrottle();
    
    // 额外的安全逻辑 - 如果踩下超过3秒警告
    if (millis() - throttlePressTime > 3000) {
      Serial.println("警告：油门激活时间过长！");
    }
  }
  
  // 其他系统逻辑
  // ...
}

// 油门激活处理函数
void activateThrottle() {
  // 这里实现油门激活功能
  // 例如：启动电机、增加速度等
  Serial.println("系统：油门激活控制执行");
  
  // 实际控制代码可根据需要添加，例如：
  // analogWrite(MOTOR_PWM_PIN, 200); // 设置PWM输出
}

// 油门持续控制函数
void maintainThrottle() {
  // 这里实现油门持续被踩下时的控制逻辑
  // 例如：根据压力传感器调整速度 (如果有模拟输入)
  // 当前仅作为占位函数
}

// 油门解除处理函数
void deactivateThrottle() {
  // 这里实现油门解除功能
  // 例如：刹车、减速等
  Serial.println("系统：执行刹车功能");
  
  // 实际控制代码，例如：
  // analogWrite(MOTOR_PWM_PIN, 0); // 停止电机
  // activateBrakes(); // 激活刹车系统
}
电驱组：今天我在临时电脑下载了esp32的编程软件，但是由于电脑系统过老，无法运行，所以只能回寝再做
电池组：今天的电池组实习内容是继续焊接完成电池组内部的模块构造，完成两个电池盒的焊接工作后，将引脚分别与INA219电压电流-接口与WEMOSLOLIN32-接口焊接，通过杜邦跳线将两者相接，准备将开发板与电脑相连，并做好MP1584EN3.3VDC-DC降压模块接口电线焊接的准备工作。</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">今天完成了电池盒焊接与INA219,WEMOSLOLIN32模块的连接，还为降压模块焊接做了准备。一步步操作让我们更熟悉各模块接口特性，也体会到电路连接中精准对位的重要性。每一步都为后续调试打基础，让我明白硬件操作需要耐心与细致，理论知识在实操中也更易理解。</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/a9q81aD.jpeg" alt="电池组原理图，实物图">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/pUNmOzS.jpeg" alt="油门">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/tED7mDB.jpeg" alt="电位器">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 5 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月9日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">电控组：今日与电驱组完成关键对接，标志着双方成果进入首次融合阶段。经过多轮密集调试，取得以下核心突破：
基础控制链路验证：成功通过摇杆实现电机转速的稳定控制，证实硬件接口及基础控制逻辑的有效性。
当前技术难点集中于差速转弯功能的实现，主要挑战包括：
左右轮速的独立精细控制
转向协调逻辑的算法优化
参数调校的精准匹配
明日攻关计划：
集中突破差速转弯的核心技术瓶颈，优化控制算法与参数配置
完成初步系统集成，为后续功能测试奠定基础
本次协作验证了跨组协同的高效性，下一步将聚焦于复杂运动控制的精细化实现。
电驱组：#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <INA219.h>
 
// 替换为图中存在的引脚（根据实际图调整，以下为示例）
#define RPWM 19
#define LPWM 18
#define REN 23
#define LEN 22
#define THROTTLE A5 // 假设换为 A5，对应 GPIO33（需图中支持）
#define GEAR 17
#define JOYSTICK_X A4 // 假设换为 A4，对应 GPIO32（需图中支持）
 
Adafruit_SSD1306 display(128, 64, &Wire, -1);
INA219 ina219;
 
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(REN, OUTPUT);
pinMode(LEN, OUTPUT);
pinMode(GEAR, INPUT_PULLUP);
pinMode(THROTTLE, INPUT);
pinMode(JOYSTICK_X, INPUT);
 
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
ina219.begin();
 
digitalWrite(REN, LOW);
digitalWrite(LEN, LOW);
}
 
void loop() {
int throttleValue = analogRead(THROTTLE);
int gear = digitalRead(GEAR);
for (int i=0; i<3; i++) {
  gear = min(gear, digitalRead(GEAR)); 
  delay(5);
}
float voltage = ina219.busVoltage();
float current = ina219.shuntCurrent() * 1000;
 
if (gear == 0) {
digitalWrite(REN, HIGH);
digitalWrite(LEN, LOW);
int pwm = map(throttleValue, 0, 4095, 0, 255);
pwm = max(pwm,30);
analogWrite(RPWM, pwm);
} else {
digitalWrite(REN, LOW);
digitalWrite(LEN, HIGH);
int pwm = map(throttleValue, 0, 4095, 0, 255);
analogWrite(LPWM, pwm);
}
 
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Voltage: ");
display.print(voltage);
display.print("V");
display.setCursor(0, 16);
display.print("Current: ");
display.print(current);
display.print("mA");
display.setCursor(0, 32);
display.print("Throttle: ");
display.print(throttleValue);
display.display();
 
delay(100);
}
电池组：电池组由于前一天镍片材料缺少，无法完成锂电池组的点焊，今天电源用直流电源替代。今日将电池系统-带灯工业自锁开关LA16的com和no引脚与铜导线焊接相连，并尝试给电机充电，在WEMOS LOLIN32开发板上写下电流电压测量代码并连接到INA219电压电流测量模块上调试，完成后对一节干电池测量发现误差较小。</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">电池组今日实习完成了电源开关连接、电机通电等操作，借直流电源替代实操，还学会用INA219测电压电流 ，收获电路实操与测量技能，深知严谨性对实验的重要。</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/tdahisk.png" alt="第5天实习图片1">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/enK8hvs.png" alt="第5天实习图片2">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 6 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月10日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">电驱组：电驱的制作。
                  电池组:画出电池组内部六节锂电池二并三串与3.3v稳压模块的电路连接原理图，并用点焊机用镍片把上述两个元件焊接相连，在人员看守下用稳压模块给电池组充电，使每节电池两端电压为4.2V左右。</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">电驱组：我对ai的使用更加熟练，对diy的操作也更加熟练，我对esp32的理解和使用也更加深刻了。
                  电池组：今日电池组完成了二并三串电路搭建，用点焊机焊接、稳压模块充电。实操中掌握了电路连接、焊接技巧，理解了串并联对电压、容量的影响，收获满满 。</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 7 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月11日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">功能图绘制：绘制电车系统的功能分解图或系统框图，包括动力系统、控制系统、人机交互、能源模块等。
                FMECA分析任务：基于功能图，在其中任选1–2个关键模块完成一页标准FMECA分析表：分析内容需包含：
        - 常见失效模式（例如，电池接口接触不良、通信延迟）及效果
        - 频率评分（O）、严重性评分（S）、失效可检测性（D），以及RPN计算
        - 风险降低措施
      FTA故障树分析任务
    - 选择一个 Top Event（如“电池过热或起火风险”），构建故障树。
    - 包含：Top Event + 中间事件 + 基本事件（硬件/软件/人因）；使用 AND / OR 门逻辑
    - 可使用纸张、或电脑绘图展示。
  /*
 * ESP32双BTS7960电机差速控制 + OLED显示
 * 功能：
 * - 摇杆Y轴控制前进/后退速度
 * - 摇杆X轴控制转向差速
 * - OLED实时显示系统状态
 */

//------------------- OLED显示屏配置 -------------------
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

//------------------- 电机驱动引脚定义 -------------------
// 左电机
#define L_R_EN 16
#define L_L_EN 17
#define L_RPWM 18
#define L_LPWM 19

// 右电机
#define R_R_EN 26
#define R_L_EN 27
#define R_RPWM 32
#define R_LPWM 33

//------------------- 输入设备引脚定义 -------------------
#define JOY_X 34    // 摇杆X轴
#define JOY_Y 35    // 摇杆Y轴
#define SWITCH_PIN 5 // 开关引脚

//------------------- 参数配置 -------------------
#define PWM_FREQ 10000    // PWM频率(Hz)
#define PWM_RES 8         // 分辨率(bit)
#define DEADZONE 15       // 摇杆死区(ADC值)
#define MIN_PWM 50        // 最小启动PWM
#define MAX_PWM 255       // 最大PWM

//------------------- 全局变量 -------------------
int joyX, joyY;          // 摇杆校准值
int centerX, centerY;    // 摇杆中心点
String motorState = "stop";
int currentSpeed = 0;
unsigned long lastDisplayUpdate = 0;

void setup() {
  // 初始化串口
  Serial.begin(115200);
  
  //------------------- 初始化OLED -------------------
  Wire.begin(15, 13);  // ESP32 I2C引脚（SDA=15, SCL=13）
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("OLED初始化失败"));
    while(1);
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
  
  // 显示开机动画
  displayStartupScreen();
  
  //------------------- 初始化电机控制 -------------------
  pinMode(L_R_EN, OUTPUT);
  pinMode(L_L_EN, OUTPUT);
  pinMode(R_R_EN, OUTPUT);
  pinMode(R_L_EN, OUTPUT);
  
  // 使能所有半桥
  digitalWrite(L_R_EN, HIGH);
  digitalWrite(L_L_EN, HIGH);
  digitalWrite(R_R_EN, HIGH);
  digitalWrite(R_L_EN, HIGH);

  // 配置PWM通道
  ledcSetup(0, PWM_FREQ, PWM_RES);  // 左电机正转
  ledcSetup(1, PWM_FREQ, PWM_RES);  // 左电机反转
  ledcSetup(2, PWM_FREQ, PWM_RES);  // 右电机正转
  ledcSetup(3, PWM_FREQ, PWM_RES);  // 右电机反转
  
  ledcAttachPin(L_RPWM, 0);
  ledcAttachPin(L_LPWM, 1);
  ledcAttachPin(R_RPWM, 2);
  ledcAttachPin(R_LPWM, 3);

  // 初始化开关
  pinMode(SWITCH_PIN, INPUT_PULLUP);

  // 摇杆校准
  calibrateJoystick();
  Serial.println("系统初始化完成！");
}

void loop() {
  // 1. 读取摇杆值
  readJoystick();
  
  // 2. 计算电机速度
  int baseSpeed = map(joyY, -1024, 1024, -MAX_PWM, MAX_PWM);
  int turnDiff = map(abs(joyX), 0, 1024, 0, MAX_PWM) * (joyX > 0 ? 1 : -1);
  
  // 3. 差速控制
  int leftSpeed = constrain(baseSpeed + turnDiff, -MAX_PWM, MAX_PWM);
  int rightSpeed = constrain(baseSpeed - turnDiff, -MAX_PWM, MAX_PWM);
  
  // 4. 更新电机状态显示
  updateMotorState(leftSpeed, rightSpeed);
  
  // 5. 驱动电机（检查开关状态）
  if(digitalRead(SWITCH_PIN) == LOW) {
    setMotor(0, leftSpeed);
    setMotor(1, rightSpeed);
  } else {
    setMotor(0, 0);
    setMotor(1, 0);
    motorState = "stop(switch)";
  }
  
  // 6. 更新OLED显示（每100ms更新一次）
  if(millis() - lastDisplayUpdate > 100) {
    updateDisplay();
    lastDisplayUpdate = millis();
  }
  
  delay(10);
}

//------------------- 功能函数 -------------------

// 显示开机动画
void displayStartupScreen() {
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.println(" EM CAR");
  display.println(" 9 GROUP");
  display.display();
  delay(2000);
}

// 更新OLED显示
void updateDisplay() {
  display.clearDisplay();
  display.setTextSize(1);
  
  // 摇杆状态
  display.setCursor(0, 0);
  display.print("X:"); display.print(joyX);
  display.print(" Y:"); display.println(joyY);
  
  // 开关状态
  display.print("stop:");
  display.println(digitalRead(SWITCH_PIN) == LOW ? "ON " : "OFF");
  
  // 电机状态
  display.print("state:"); display.println(motorState);
  
  // 速度显示
  display.print("speed:"); 
  display.print(currentSpeed); 
  display.println("%");
  
  // 电机PWM值
  display.print("L:"); display.print(map(abs(joyY + joyX), 0, 2048, 0, 100));
  display.print("% R:"); display.print(map(abs(joyY - joyX), 0, 2048, 0, 100));
  display.println("%");
  
  display.display();
}

// 更新电机状态
void updateMotorState(int left, int right) {
  currentSpeed = map(constrain(abs(joyY), 0, 1024), 0, 1024, 0, 100);
  
  if(abs(left) < 10 && abs(right) < 10) {
    motorState = "stop";
  } else if(left > 0 && right > 0) {
    motorState = "forward";
  } else if(left < 0 && right < 0) {
    motorState = "backward";
  } else if(left > right) {
    motorState = "turn left";
  } else {
    motorState = "turn right";
  }
}

// 摇杆校准函数
void calibrateJoystick() {
  centerX = 0;
  centerY = 0;
  for(int i=0; i<100; i++) {
    centerX += analogRead(JOY_X);
    centerY += analogRead(JOY_Y);
    delay(10);
  }
  centerX /= 100;
  centerY /= 100;
}

// 读取摇杆值(带死区处理)
void readJoystick() {
  int rawX = analogRead(JOY_X) - centerX;
  int rawY = analogRead(JOY_Y) - centerY;
  
  // 死区处理
  joyX = (abs(rawX) > DEADZONE) ? rawX : 0;
  joyY = (abs(rawY) > DEADZONE) ? rawY : 0;
}

// 电机控制函数
void setMotor(int motor, int speed) {
  speed = constrain(speed, -MAX_PWM, MAX_PWM);
  
  if(motor == 0) { // 左电机
    if(speed > 0) {
      ledcWrite(0, abs(speed));
      ledcWrite(1, 0);
    } else {
      ledcWrite(0, 0);
      ledcWrite(1, abs(speed));
    }
  } else { // 右电机
    if(speed > 0) {
      ledcWrite(2, abs(speed));
      ledcWrite(3, 0);
    } else {
      ledcWrite(2, 0);
      ledcWrite(3, abs(speed));
    }
  }
}

电车系统
├── 动力系统
├── 电机驱动单元
│   ├── 牵引电机
│   ├── 逆变器（控制电机转速/扭矩）
│   └── 减速器
├── 传动装置
│   ├── 传动轴
│   └── 轮对
└── 再生制动系统
             ├── 能量回收单元
             └── 制动控制模块
├── 控制系统控制系统
├── 中央控制单元（CCU）
│   ├── 车辆状态监控
│   └── 故障诊断
      │   ├── 加速度控制
│   └── 防滑保护
│   ├├── 通信网络
── CAN总线
│   └── 车载传感器数据交互
└── 安全保护模块
           ├── 紧急制动
           └── 过压/过流保护
├── 人机交互系统
├── 驾驶员界面
│   ├── 仪表盘（速度/电量/故障指示）
│   └── 控制手柄（调速/制动）
├── 乘客界面
│   ├── 信息显示屏（到站/换乘）
│   └── 紧急呼叫按钮
└── 远程监控
           ├── 调度中心数据上传
           └── OTA软件更新
├── 能源模块
├── 动力电池组
│   ├── 电芯阵列
│   ├── BMS（电池管理系统）
│   └── 冷却系统
├── 充电接口
│   ├── 受电弓（接触网充电）
│   └── 快充插座（地面充电）
└── 能量分配单元
           ├── DC/DC转换器
        └── 高压配电箱
└── 辅助系统
├── 空调系统
├── 照明系统
└── 车门控制单元

1. 动力电池组FMECA分析
项目	失效模式	失效影响	O	S	D	RPN	风险降低措施
电芯	电芯短路	热失控、起火爆炸；整车动力中断	3	10	2	60	- 采用固态电解质电池
- BMS增加温度/电压实时监控
- 热隔离设计
BMS	电量估算误差（>10%）	续航里程骤降；过充/过放风险	5	7	4	140	- 多算法融合校准（安时积分+OCV）
- 定期OTA校准
冷却系统	冷却液泄漏	电池温度升高；寿命衰减	4	8	3	96	- 双回路冗余冷却设计
- 漏液传感器+声光报警
高压连接器	接触电阻增大	能量损耗；局部过热	6	6	5	180	- 镀金触点+强制风冷
- 定期插拔力检测

2. 控制系统通信网络FMECA分析
项目	失效模式	失效影响	O	S	D	RPN	风险降低措施
CAN总线	信号延迟（>100ms）	电机响应滞后；紧急制动失效	4	9	3	108	- 双CAN总线冗余
- 优先级调度（制动信号优先）
车载传感器	速度传感器漂移	车速误报导致意外加速/制动	5	8	2	80	- 多传感器数据融合（雷达+编码器）
- 自诊断算法
中央控制单元	软件死机	整车控制瘫痪；安全模式强制停车	2	10	1	20	- 看门狗定时器硬复位
- 关键功能硬件备份（如制动信号直连电机）
电源模块	电压波动（±20%）	控制器重启；通信丢包	3	7	4	84	- 增加超级电容缓冲
- 宽电压输入设计（9-36VDC）

电池过热或起火风险  
├── [热失控未及时抑制]  
│   ├── [电池内部短路] + [冷却系统失效]  
│   │   ├── 电芯制造缺陷（如隔膜破损）  
│   │   ├── 机械冲击（碰撞/振动导致变形）  
│   │   └── 冷却液泄漏 · 温度传感器故障  
│   └── [BMS故障]  
│       ├── 过充保护算法错误（软件BUG）  
│       └── 电压采样电路漂移（硬件老化）  
├── [外部热源引燃]  
│   ├── 充电桩过压（接触网电压波动）  
│   └── 周边火灾蔓延（OR门）  
└── [人为操作失误]  
    ├── 快充超时（未按规程终止充电）  
    └── 维护遗漏（未更换老化电芯）  </span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">对电车设计做到了可靠性分析。</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 8 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月12日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">电驱、电控、电池协同：共同完成整车3D建模与设计
                  电控：PCB绘制
                  电池：完善整体供电方案
                </span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">在本次实习过程中，我参与了电驱组、电控组、电池组的协同工作，深刻体会到了跨团队合作在整车设计中的重要性。通过共同完成整车3D建模与设计，我不仅提升了对整车结构的理解，也锻炼了系统思维能力。在电控组工作期间，我实际参与了PCB的绘制工作，对电路设计流程有了更直观的认识；同时，在电池组的配合中，我了解并协助完善了整体供电方案，对动力系统的稳定性与安全性有了更深入的理解。</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/3dynEh6.png" alt="第8天实习图片1">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/smvrwWN.png" alt="第8天实习图片2">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/2Sr7k6f.png" alt="第8天实习图片3">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/ckFCkAi.jpeg" alt="第8天实习图片4">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 9 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月13日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">车架组装流程，车架设计汇报，锯铝材，列车架组装配件清单，组装车架，梳理整车系统电路原理</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">在此次实习中，我深刻参与了车架的组装流程和设计工作，特别是在锯铝材和列车架组装配件清单的整理中，积累了宝贵的实操经验。通过学习车架的设计汇报，我掌握了如何从设计图纸到实际操作之间的转换，深入了解了每一个细节的重要性。
在实际操作过程中，我亲自锯铝材并参与了车架的组装，不仅提升了自己的动手能力，也对铝材的特性、精度要求和工具使用有了更直观的理解。与此同时，我梳理了整车系统电路原理，学会了如何将电路与机械部分进行有效对接，确保系统的兼容性和安全性。
这次实习让我更加明白了车架设计与组装的复杂性，以及每个环节对整车性能的影响，也锻炼了我在实际工程中解决问题的能力。
</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/kTWItZU.jpeg" alt="第9天实习图片1">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/a6nFM9X.jpeg" alt="第9天实习图片2">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/sWQRhLW.jpeg" alt="第9天实习图片1">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 10 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月14日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">领取配件，组装车架，梳理整车系统电路原理</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">在这次实习过程中，我主要参与了车架的组装工作，并且对整车系统的电路原理进行了梳理。通过动手实践，我对车架的结构和各个组件之间的配合有了更深的理解，尤其是在组装过程中，细节的处理和精度要求让我更加意识到工程中每个环节的重要性。
在学习电路原理时，我通过分析整车电路的布局，理解了电路系统的工作原理及其与其他系统的协同作用。这个过程不仅加深了我对电路设计的理解，还培养了我在实际问题中寻找解决方案的能力。
总体而言，这次实习让我在理论知识与实际操作之间建立了更紧密的联系，提升了我的实践能力和工程思维，也让我对汽车行业的工作流程有了更加全面的认识。
</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://wp-cdn.4ce.cn/v2/GkdGKRC.jpeg" alt="第10天实习图片1">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 11 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月15日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">车架组装，激光切割</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">在这次实习中，我主要参与了车架的组装和激光切割工作。通过组装车架，我更深入地了解了车架各个部件的结构和安装流程，学习了如何精确地将各个部件连接成一个完整的框架。这不仅考验了我的动手能力，还让我意识到细节精度和配合的重要性。
在激光切割的环节，我学习了如何使用激光切割设备进行精确的金属加工，了解了切割参数对成品质量的影响。这让我对制造工艺和加工精度有了更直观的认识，也增强了我在工业生产中的实际操作技能。
总体而言，这次实习让我不仅提升了机械操作的技能，还加深了对现代制造技术的理解，为今后从事相关工作奠定了基础。
</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://via.placeholder.com/200x150?text=Day11_Pic1" alt="第11天实习图片1">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 12 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月16日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">电车组装与实地测试</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">在整车实地测试中排查了诸多问题，继续调试，完善小车在电驱系统调试的关键阶段，我们遭遇了BTS7960驱动模块的意外烧毁问题。作为电驱系统的核心组件，BTS7960原本承担着550电机的高效驱动任务——这款半桥驱动芯片单通道最大电流可达30A，理论上是适配550电机（峰值电流约60A）的合理选择。但在首次满负载测试时，模块输出端突然冒出青烟，用万用表检测发现上下桥臂MOS管击穿，推测是电机启动瞬间的冲击电流（实测峰值达75A）超过了模块短时耐受阈值，加之散热片面积不足（仅覆盖芯片底部，未延伸至侧面），热量快速累积导致器件失效。
为快速推进进度，我们首先尝试替换为实验室库存的L298N驱动模块。该模块虽在教学场景中广泛使用，但其单通道持续电流仅4A（峰值6A）的设计与550电机的需求严重不匹配：接入后电机仅能低速抖动，PWM信号输入30%占空比时MOS管已发烫；强行提升占空比至50%，模块输出端电容迅速鼓包，最终因过热保护触发停机。更棘手的是，L298N的H桥控制逻辑与Wemos Lolin32板输出的PWM信号（3.3V电平）存在兼容性问题，信号边沿陡峭度不足导致桥臂换相延迟，进一步加剧了发热。
此时距离整车调试节点仅剩几个小时，寻求老师帮助后发现无备用BTS7960模块。为不耽误进度，我们转向相邻小组寻求支持。培养了严谨的工程精神，明白了实践的重要性。经过努力成功让小车装车后能够成功转动，继续调整代码，优化代码，控制速度尽量不让电机功率过大，等待电源的对接</span></p>
                <p><strong>实习图片:</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://via.placeholder.com/200x150?text=Day12_Pic1" alt="第12天实习图片1">
                    <span class="image-note"></span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 13 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月17日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">路演汇报</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">邻组正在调试的电动小车恰好使用了同型号驱动模块，且已完成基础验证。经协商，我们在其完成路演后立即借用模块，并同步复现了原驱动电路的布局：借用的BTS7960模块接入后，550电机顺利实现0-3000rpm无级调速，满负载运行5分钟未出现异常温升，最终助力整车在截止时间前完成调试。不放弃就一定成功</span></p>
                <p><strong>实习图片:经查询，2025年7月19日是星期六。</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://via.placeholder.com/200x150?text=Day13_Weekend" alt="第13天实习图片1">
                    <span class="image-note">（请将图片 URL 替换为实际图片链接或本地图片路径）</span>
                </div>
            </div>
        </div>

        <div class="log-section">
            <h2>第 14 天实习日志</h2>
            <div class="log-entry">
                <p><strong>日期:</strong> <span class="log-date">2025年7月18日</span></p>
                <p><strong>地点:</strong> <span class="log-location">西南交通大学峨眉校区</span></p>
                <p><strong>时间段:</strong> <span class="log-time">8：30~17：30</span></p>
                <p><strong>单位:</strong> <span class="log-unit">集成电路科学与工程学院峨眉产教融合基地</span></p>
                <p><strong>实习内容:</strong> <span class="log-content">返程</span></p>
                <p><strong>收获与体会:</strong> <span class="insights-gains">无</span></p>
                <p><strong>实习图片:经查询，2025年7月20日是星期日。</strong></p>
                <div class="log-images-gallery">
                    <img class="log-image" src="https://via.placeholder.com/200x150?text=Day14_Weekend" alt="第14天实习图片1">
                    <span class="image-note">（请将图片 URL 替换为实际图片链接或本地图片路径）</span>
                </div>
            </div>
        </div>

    </div>
</body>
</html>